//////////////////////////////////////////////////////
//
// /buola/include/buola/net/chttprequest.h
//
//  Created on: Oct 24, 2009
//      Author: xavi
//
/////

#ifndef _BUOLA_NET_CHTTPREQUEST_H_
#define _BUOLA_NET_CHTTPREQUEST_H_

#include <buola/io/curi.h>

namespace buola { namespace io {

class CHTTPForm;
class CHTTPMultiForm;

class CHTTPRequest
{
    class SImpl;

public:
    CHTTPRequest();
    CHTTPRequest(const CURI &pURI);
    ~CHTTPRequest();

    void SetURI(const CURI &pURI);

    void SetPost(const CHTTPForm &pForm);
    void SetPost(const CHTTPMultiForm &pForm);
    void SetPost(const xml::CDoc &pDoc);
    void SetPost(const std::string &pType,const std::string &pContent);
    
    void SetGet();

    void SetFollowLocation(bool pFollow);

    void AddHeader(const std::string &pHeader);
    void AddHeader(const std::string &pName,const std::string &pValue);
    void ClearHeaders();

    int Perform(std::string &pResult);

    CURI GetRedirectURI();

private:
    std::unique_ptr<SImpl> mImpl;
};

/*namespace io*/ } /*namespace buola*/ }

#endif
